/* Most of this class is a written by
*
* Gidon Moont from
* Imperial College London
*
* I just rearranged/moved methods so that they better fit into the Grix architecture.
* Again: all the credit goes to Gidon.
*/
package org.vpac.voms.control;
import java.util.ArrayList;
import java.util.Enumeration;
import org.apache.log4j.Logger;
import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1Set;
import org.bouncycastle.asn1.ASN1TaggedObject;
import org.bouncycastle.asn1.DERGeneralString;
import org.bouncycastle.asn1.x509.AttributeCertificate;
import org.vpac.voms.model.proxy.VomsProxy;
/**
* Helper methods
*
* @author Markus Binsteiner
*
*/
public class Voms_Utils {
static final Logger myLogger = Logger.getLogger(Voms_Utils.class.getName());
public static String getDefaultFQAN(ArrayList<String> fqans) {
for (String fqan : fqans) {
if (fqan.indexOf("Role=NULL") == -1)
return fqan;
}
return null;
}
public static String getRole(String fqan) {
int start = fqan.indexOf("Role=") + 5;
int end = fqan.indexOf("/Capability=");
return fqan.substring(start, end);
}
public static String getGroup(String fqan) {
int end = fqan.indexOf("/Role=");
return fqan.substring(0, end);
}
/**
* Extracts the FQANs from an AttributeCertificate
*
* @param ac
* the AttributeCertificate
* @return all FQANs in this AttributeCertificate
*/
public static ArrayList<String> getFQANs(AttributeCertificate ac) {
ArrayList<String> theseFQANs = new ArrayList<String>();
try {
// could have more than one AC in here...
for (Enumeration a = ac.getAcinfo().getAttributes().getObjects(); a
.hasMoreElements();) {
ASN1Sequence sequence = (ASN1Sequence) a.nextElement();
// sequence contains the OID [voms 4] (as a DERObjectIdentifier)
// at address 0 , and an SET at address 1
ASN1Set set = (ASN1Set) sequence.getObjectAt(1);
// set contains only a SEQUENCE at address 0
ASN1Sequence sequence2 = (ASN1Sequence) set.getObjectAt(0);
// sequence2 contains a TAGGED OBJECT ad address 0 and another
// SEQUENCE at address 1
ASN1TaggedObject taggedObject = (ASN1TaggedObject) sequence2
.getObjectAt(0);
// dig down the tagged object... (undocumented?) - TagNumber
// value is 0
ASN1TaggedObject taggedObject2 = (ASN1TaggedObject) taggedObject
.getObject();
// this tagged object has TagNumber value of 6 (?)
ASN1OctetString originOctetString = (ASN1OctetString) taggedObject2
.getObject();
String origin = (new DERGeneralString(
originOctetString.getOctets())).getString();
ASN1Sequence fqanSequence = (ASN1Sequence) sequence2
.getObjectAt(1);
// this is the actual sequence of FQANs
for (int fqan = 0; fqan < fqanSequence.size(); fqan++) {
ASN1OctetString fqanOctetString = (ASN1OctetString) fqanSequence
.getObjectAt(fqan);
String FQAN_Value = (new DERGeneralString(
fqanOctetString.getOctets())).getString();
theseFQANs.add(FQAN_Value);
}
}
} catch (Exception e) {
// e.printStackTrace();
myLogger.error(e);
}
for (String fqan : theseFQANs) {
myLogger.debug("FQAN: " + fqan);
;
}
return theseFQANs;
}
}